package pe.gob.inei.sirtod.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;

import pe.gob.inei.sirtod.util.DomainBase;

@Entity
@NamedNativeQueries({
	@NamedNativeQuery(name = "DatoAnual.findAllDepartamental", query = "SELECT D_A.ID_DATO, D_A.ANIO, D.DES_DEPARTAMENTO, "
		+ "'' AS DES_PROVINCIA, '' AS DES_DISTRITO, I.NOMBRE_VARIABLE, D_A.INDICADOR_ID, D_A.A_1 AS VALOR, "
		+ "D_A.ID_DEPARTAMENTO, '' AS ID_PROVINCIA, '' AS ID_DISTRITO, U_M.DESCRIPCION AS DES_UNIDAD_MEDIDA "
		+ "FROM SIDIN_CONSULTA.DATO_ANUAL_DEP D_A LEFT OUTER JOIN SIDIN_CONSULTA.DEPARTAMENTO D ON "
		+ "D_A.ID_DEPARTAMENTO = D.ID_DEPARTAMENTO LEFT OUTER JOIN SIDIN_CONSULTA.W_INDICADOR I ON "
		+ "D_A.INDICADOR_ID = I.INDICADOR_ID LEFT OUTER JOIN SIDIN_CONSULTA.W_UNIDAD_MEDIDA U_M ON "
		+ "I.UNIDAD_MEDIDA_ID = U_M.UNIDAD_MEDIDA_ID WHERE D.ID_DEPARTAMENTO IN (:lisDepSel) "
		+ "AND D_A.INDICADOR_ID IN (:lisIndSel) AND SUBSTR(D_A.ANIO,1,4) BETWEEN :txtAniIni AND :txtAniFin "
		+ "ORDER BY D_A.ID_DEPARTAMENTO, D_A.ANIO, D_A.INDICADOR_ID", resultClass = DatoAnual.class),
	@NamedNativeQuery(name = "DatoAnual.findAllProvincial", query = "SELECT D_A.ID_DATO, D_A.ANIO, D.DES_DEPARTAMENTO, "
		+ "P.DES_PROVINCIA, '' AS DES_DISTRITO, I.NOMBRE_VARIABLE, D_A.INDICADOR_ID, D_A.A_1 AS VALOR, "
		+ "D_A.ID_DEPARTAMENTO, D_A.ID_PROVINCIA, '' AS ID_DISTRITO, U_M.DESCRIPCION AS DES_UNIDAD_MEDIDA "
		+ "FROM SIDIN_CONSULTA.DATO_ANUAL_PROV D_A LEFT OUTER JOIN SIDIN_CONSULTA.DEPARTAMENTO D ON "
		+ "D_A.ID_DEPARTAMENTO = D.ID_DEPARTAMENTO LEFT OUTER JOIN SIDIN_CONSULTA.PROVINCIA P ON D_A.ID_PROVINCIA = "
		+ "P.ID_PROVINCIA LEFT OUTER JOIN SIDIN_CONSULTA.W_INDICADOR I ON "
		+ "D_A.INDICADOR_ID = I.INDICADOR_ID LEFT OUTER JOIN SIDIN_CONSULTA.W_UNIDAD_MEDIDA U_M ON "
		+ "I.UNIDAD_MEDIDA_ID = U_M.UNIDAD_MEDIDA_ID WHERE P.ID_PROVINCIA IN (:lisDepSel) "
		+ "AND D_A.INDICADOR_ID IN (:lisIndSel) AND SUBSTR(D_A.ANIO,1,4) BETWEEN :txtAniIni AND :txtAniFin "
		+ "ORDER BY D_A.ID_DEPARTAMENTO, D_A.ANIO, D_A.INDICADOR_ID", resultClass = DatoAnual.class)
})
@SuppressWarnings("serial")
public class DatoAnual implements DomainBase {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID_DATO")
	private long id;

	@Column(name = "ANIO")
	private String periodo;

	@Column(name = "DES_DEPARTAMENTO")
	private String departamento;

	@Column(name = "DES_PROVINCIA")
	private String provincia;

	@Column(name = "DES_DISTRITO")
	private String distrito;

	@Column(name = "INDICADOR_ID")
	private Integer indicadorId;

	@Column(name = "VALOR")
	private String valor;

	@Column(name = "ID_DEPARTAMENTO")
	private String departamentoId;

	@Column(name = "ID_PROVINCIA")
	private String provinciaId;

	@Column(name = "ID_DISTRITO")
	private String distritoId;

	@Column(name = "DES_UNIDAD_MEDIDA")
	private String unidadMedida;

	public String getValue(int txtPerSel) {
		return valor;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getPeriodo() {
		return periodo;
	}

	public void setPeriodo(String periodo) {
		this.periodo = periodo;
	}

	public String getDepartamento() {
		return departamento;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}

	public String getProvincia() {
		return provincia;
	}

	public void setProvincia(String provincia) {
		this.provincia = provincia;
	}

	public String getDistrito() {
		return distrito;
	}

	public void setDistrito(String distrito) {
		this.distrito = distrito;
	}

	public Integer getIndicadorId() {
		return indicadorId;
	}

	public void setIndicadorId(Integer indicadorId) {
		this.indicadorId = indicadorId;
	}

	public String getValor() {
		return valor;
	}

	public void setValor(String valor) {
		this.valor = valor;
	}

	public String getDepartamentoId() {
		return departamentoId;
	}

	public void setDepartamentoId(String departamentoId) {
		this.departamentoId = departamentoId;
	}

	public String getProvinciaId() {
		return provinciaId;
	}

	public void setProvinciaId(String provinciaId) {
		this.provinciaId = provinciaId;
	}

	public String getDistritoId() {
		return distritoId;
	}

	public void setDistritoId(String distritoId) {
		this.distritoId = distritoId;
	}

	public String getUnidadMedida() {
		return unidadMedida;
	}

	public void setUnidadMedida(String unidadMedida) {
		this.unidadMedida = unidadMedida;
	}
}